home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload Trio 2 / Shareware Overload Trio Volume 2 (Chestnut CD-ROM).ISO / dir24 / tn-x1jr2.zip / TN-X1J2.ZIP / PATCHTXT.C < prev    next >
Text File  |  1994-03-16  |  48KB  |  1,367 lines

  1. #include <stdio.h>
  2. #include "patch.h"
  3. #include "patchdef.h"
  4.  
  5. static char *openingtext[] = {
  6.     "Select a menu from below, or hit escape to exit",
  7.     "    Level 1 parameters", 
  8.     "    Level 2 parameters", 
  9.     "    Level 3 parameters", 
  10.     "    Level 4 parameters", 
  11.     "    Level 7 parameters", 
  12.     "    IP Router Parameters",
  13.     "    Miscellaneous Parameters",
  14.     "    Meter Control Parameters",
  15.     "    Save changes to image on disk",
  16.     "    Store parameters in a file",
  17.     "    Load parameters from a file",
  18.     NULL
  19. };
  20.  
  21. static char *level1text[] = 
  22. {    "Select a parameter from below or hit Escape for previous menu",
  23.     "    Persistance ( n / 256 )",
  24.     "    Slot time ( 10's of milliseconds )",
  25.     "    Full duplex",
  26.     "    Send flags if no data ( full duplex )",
  27.     "    Transmit keyup delay ( 10's of msec )",
  28.     "    CWID repeat period ( seconds )",
  29.     "    CWID keyer speed ( dot speed 10's msec )",
  30.     "    RS232 host mode ( normal / DCD mode )",
  31.     "    RS232 crosslink protocol", 0 
  32. };
  33.  
  34. static char *level2text[] = 
  35. {    "Select a parameter from below or hit Escape for previous menu",
  36.     "    Node callsign",
  37.     "    FRACK ( T1 ) time ( seconds )",
  38.     "    AX.25 window size ( packets )",
  39.     "    AX.25 retries",
  40.     "    Ack ( T2 ) time ( 10's of milliseconds )",
  41.     "    Active check ( T3 ) time ( 10's msecs )",
  42.     "    Digipeat",
  43.     "    Callsign Validation",
  44.     "    MHeard list length  ( 0=disabled )", 
  45.     "    Digipeat up / downlink control", 0
  46. };
  47.  
  48. static char *level3text[] = 
  49. {    "Select a parameter from below or hit Escape for previous menu",
  50.     "    Node alias",
  51.     "    Size of destination node table",
  52.     "    Minimum auto update quality",
  53.     "    HDLC ( radio port ) default quality",
  54.     "    RS232( crosslink  ) default quality",
  55.     "    Initial obsolescence count",
  56.     "    Minimum obsolescence count for broadcast",
  57.     "    Nodes broadcast interval ( seconds )",
  58.     "    Initial 'time to live' ( hops )",
  59.     "    Selective nodes broadcasts on ports",
  60.     "    Crosslink port node b'cast interval (s)",
  61.     "    Node broadcast algorithm port control", 
  62.     "    Hash node broadcast port control",
  63.     "    Control of Slime Trails", 0
  64. };
  65.  
  66. static char *level4text[] = 
  67. {    "Select a parameter from below or hit Escape for previous menu",
  68.     "    Transport FRACK timeout ( seconds )",
  69.     "    Transport retry counter",
  70.     "    Transport acknowledge delay ( seconds )",
  71.     "    Transport busy delay ( seconds )",
  72.     "    Transport window size",
  73.     "    Transport overfill limit ( frames )", 0 
  74. };
  75.  
  76. static char *level7text[] = 
  77. {    "Select a parameter from below or hit Escape for previous menu",
  78.     "    No activity timeout ( seconds )",
  79.     "    Beacon mode control",
  80.     "    Beacon period ( seconds )",
  81.     "    Beacon digipeat callsign",
  82.     "    CQ enable flag",
  83.     "    Information message",
  84.     "    Password",
  85.     "    Connect redirector",
  86.     "    User message control flags",
  87.     "    Auto reconnect to node", 0
  88. };
  89.  
  90. static char *metertext[] = 
  91. {    "Select a parameter from below or hit Escape for previous menu",
  92.     "    Meter Control Flags Menu",
  93.     "    Deviation Meter Scale Factor",
  94.     "    S Meter Noise Floor ADC reading",
  95.     "    S Meter Scale Factor",
  96.     "    dBm Meter Scale Factor",
  97.     "    dBm Noise Floor",
  98.     "    Voltmeter Channel 1 Scale Factor",
  99.     "    Voltmeter Channel 2 Scale Factor", 
  100.     "    Voltmeter Channel 1 Offset Value",
  101.     "    Voltmeter Channel 2 Offset Value", 0
  102. };
  103.  
  104. static char *misctext[] = 
  105. {    "Select a parameter from below or hit Escape for previous menu",
  106.     "    Host command lead-in char ( Escape )", 0
  107. };
  108.  
  109. static char *meterflags_menu_help[] = 
  110. {    "This menu allows configuration of the meter control flags,",
  111.     "namely the following :",
  112.     "    En/Disabling of the deviation meter",
  113.     "    En/Disabling of the signal strength meter",
  114.     "    Whether signal strength is in 'Sn' or 'dBm'",
  115.     "    En/Disabling voltmeter channel 1",
  116.     "    En/Disabling voltmeter channel 2", 0
  117. };
  118.  
  119. static char *level1_menu_help[] = 
  120. {    "This menu allows configuration of the level 1 parameters,",
  121.     "namely the following :",
  122.     "    Persistance",
  123.     "    Slot time",
  124.     "    Full duplex flag",
  125.     "    Send flags if no data needed",
  126.     "    Transmit keyup delay",
  127.     "    CWID repeat period",
  128.     "    CWID keyer speed",
  129.     "    RS232 host mode operation",
  130.     "    RS232 crosslink protocol", 0 
  131. };
  132.  
  133. static char *level2_menu_help[] = 
  134. {    "This menu allows configuration of the level 2 parameters,",
  135.     "namely the following :",
  136.     "    Node callsign",
  137.     "    FRACK ( T1 ) time",
  138.     "    AX.25 window size ( MAXFRAME )",
  139.     "    AX.25 retries",
  140.     "    Ack ( T2 ) time",
  141.     "    Active check ( T3 ) time",
  142.     "    Digipeat enable / disable",
  143.     "    Callsign Validation enable / disable",
  144.     "    MHeard list length & enable / disable", 
  145.     "    Control of L2 digi up & downlinks", 0
  146. };
  147.  
  148. static char *level3_menu_help[] = 
  149. {    "This menu allows configuration of the level 3 parameters,",
  150.     "namely the following :",
  151.     "    Node alias",
  152.     "    Size of destination node table",
  153.     "    Minimum auto update quality",
  154.     "    HDLC ( radio port ) default quality",
  155.     "    RS232( crosslink  ) default quality",
  156.     "    Initial obsolescence count",
  157.     "    Minimum obsolescence count for broadcast",
  158.     "    Nodes broadcast interval",
  159.     "    Initial 'time to live' for network frames",
  160.     "    Selective nodes broadcasts on ports",
  161.     "    Crosslink port node broadcast interval",
  162.     "    Node broadcast algorithm on ports",
  163.     "    Broadcast of hash nodes on ports",
  164.     "    Control of Slime Trails", 0 
  165. };
  166.  
  167. static char *level4_menu_help[] = 
  168. {    "This menu allows configuration of the level 4 parameters,",
  169.     "namely the following :",
  170.     "    Transport FRACK timeout",
  171.     "    Transport retry counter",
  172.     "    Transport acknowledge delay",
  173.     "    Transport busy delay",
  174.     "    Transport window size",
  175.     "    Transport overfill limit ( frames per connection )", 0 
  176. };
  177.  
  178. static char *level7_menu_help[] = 
  179. {    "This menu allows configuration of the level 7 ( PAD ) parameters,",
  180.     "namely the following :",
  181.     "    No activity timeout",
  182.     "    Beacon mode control",
  183.     "    Beacon period control",
  184.     "    Beacon digi",
  185.     "    CQ enable flag",
  186.     "    Information message",
  187.     "    Password",
  188.     "    Connect redirector",
  189.     "    Enable / disable of user messages",
  190.     "    Enable / disable auto node reconnect", 0
  191. };
  192.  
  193. static char *misc_menu_help[] = 
  194. {    "This menu allows configuration of miscellaneous parameters,",
  195.     "namely the following :",
  196.     "    Host terminal command lead-in char ( escape )", 0 
  197. };
  198.  
  199. static char *persistance_help[] =
  200. {    "Persistance is the method by which the radio channel is shared",
  201.     "between stations. It is an exponential decay means by which",
  202.     "the channel is seized. It takes a value between 1 and 255.",
  203.     "The probability that the channel will be seized at each interval",
  204.     "of SLOTTIME, is (persistance / 256 ).", 0
  205. };
  206.  
  207. static char *slottime_help[] =
  208. {    "Slottime is the delay between intervals when waiting to transmit.",
  209.     "Every interval of Slottime, the node generates a new random",
  210.     "number for persistance checking. If the decision is not to seize",
  211.     "the channel, the node waits another period of slottime.",
  212.     "The units of slottime are tens of milliseconds.", 0
  213. };
  214.  
  215. static char *fullduplex_help[] =
  216. {    "The full duplex flag should only be set if the radio",
  217.     "is capable of operating full duplex.",
  218.     "What happens normally is that the node waits until DCD",
  219.     "goes off before seizing the channel.",
  220.     "When the full duplex flag is set, it dispenses with",
  221.     "the nicety of checking for a free channel - it just",
  222.     "keys up the transmitter.", 0
  223. };
  224.  
  225. static char *sendflags_help[] =
  226. {    "In a full duplex system, it can be convenient to",
  227.     "send acknowledgements to packets even if there is",
  228.     "no data waiting, or to acknowledge all packets.",
  229.     "Setting this flag enables this ( I think ! ).", 0
  230. };
  231.  
  232. static char *txdelay_help[] =
  233. {    "This parameter sets the transmitter keyup delay.",
  234.     "This should be long enough to cope with the TX",
  235.     "transmit delay, the worst case user's squelch",
  236.     "open delay and the time for their receiver to",
  237.     "lock onto the data.",
  238.     "There is no simple recommended value !", 0
  239. };
  240.  
  241. static char *cwidperiod_help[] =
  242. {    "The CWID repeat period is the time delay between the",
  243.     "CW idents. If it is set to zero, CWID is disabled.",
  244.     "DO NOT set this too short - just enough to obey your",
  245.     "license.",
  246.     "The message sent by CW is the node's callsign ( wthout",
  247.     "the SSID ).", 0
  248. };
  249.  
  250. static char *cwidspeed_help[] =
  251. {    "This parameter sets the speed of sending the CWID.",
  252.     "It is in units of tens of milliseconds. The speed",
  253.     "in words per minute is 120/n, where n is the value",
  254.     "of this parameter. Hence a setting of 6 corresponds",
  255.     "to 20 wpm.", 0
  256. };
  257.  
  258. static char *hostmode_help[] =
  259. {    "This parameter sets the mode of operation of the host",
  260.     "port ( ie the RS232 port when pin 23 is NOT tied low",
  261.     "for crosslink. When set to 0 ( ie disabled, ie standard",
  262.     "mode ), the node acts as a standard node with terminal",
  263.     "connected. When set ( ie DCD node ), the escape-C and",
  264.     "escape-D commands are disabled. Instead, the node uses",
  265.     "hardware handshaking to connect & disconnect", 0
  266. };
  267.  
  268. static char *crosslink_help[] =
  269. {    "This parameter sets the protocol used on the RS232",
  270.     "port, when pin 23 is tied low. When set to 0 ( ie",
  271.     "the standard mode ), the standard TheNet crosslink",
  272.     "format is used. The other settings replace the",
  273.     "crosslink protocol with KISS.",
  274.     "There are 3 variants of this. The simplest mode just",
  275.     "replaces crosslink with KISS. In the next version,",
  276.     "packets received by the node that are not intended for",
  277.     "it, as well as UI frames, are copied to the other port",
  278.     "to the one on which it was received. In this mode, a",
  279.     "KISS application such as TCP/IP and the node share the",
  280.     "same TNC & radio. In the final mode, ALL packets received",
  281.     "on one port are copied to the other. This is useful in",
  282.     "debugging a link or running something like AXSTAT",
  283.     "Note packets sent BY the node are never copied across", 0
  284. };
  285.  
  286. static char *nodecall_help[] =
  287. {    "This sets the node's AX.25 callsign. It is not checked",
  288.     "for validity, but must consist of alphabetic & numeric",
  289.     "characters ( 1 to 6 ), followed optionally by a hyphen",
  290.     "and an SSID in the range 0-15.",
  291.     "Any callsign entered is converted to uppercase.", 0
  292. };
  293.  
  294. static char *T1_help[] =
  295. {    "This is the AX.25 link FRACK parameter.",
  296.     "It is the number of seconds between retries",
  297.     "for unacknowledged packets, in seconds", 0
  298. };
  299.  
  300. static char *L2window_help[] =
  301. {    "This is the maximum number of packets that may be sent",
  302.     "on a level 2 link without acknowledgement. After this",
  303.     "the node needs acknowledgement before proceeding with",
  304.     "other frames", 0
  305. };
  306.  
  307. static char *L2retry_help[] =
  308. {    "This is the number of retries made at level 2, either",
  309.     "to establish a link or in polling for acknowledgement.",
  310.     "If set to zero, it will try forever!.", 0
  311. };
  312.  
  313. static char *T2_help[] =
  314. {    "This is the length of time the node waits after receiving",
  315.     "a packet before sending an RR/RNR/REJ packet. The idea is",
  316.     "to try to optimise use of the channel in piggy-backing the",
  317.     "response on another packet. The parameter is in units of",
  318.     "tens of milliseconds.", 0
  319. };
  320.  
  321. static char *T3_help[] =
  322. {    "This is the AX.25 T3 timer initialiser. On an inactive",
  323.     "link, the node will poll the other station after this",
  324.     "length of time to check if it is still there and to",
  325.     "try to remove deadlocks. it is in units of tens of",
  326.     "milliseconds.", 0
  327. };
  328.  
  329. static char *digipeat_help[] =
  330. {    "This flag, when enabled, allows other stations",
  331.     "to digipeat ( ie L2 relay ) through the node.", 0
  332. };
  333.  
  334. static char *callvalidate_help[] =
  335. {    "This flag, if set, will only allow calls to be made",
  336.     "to stations where a 'valid' callsign is entered or",
  337.     "where the call is a transport connection. It is",
  338.     "used by the level 7 switch.", 0
  339. };
  340.  
  341. static char *mheard_help[] =
  342. {    "This parameter sets the heard list size. It may also",
  343.     "be used to disable the updating of the list by setting",
  344.     "it to zero.",
  345.     "Each entry in the list takes a whole buffer, so keep it",
  346.     "as small as possible", 0
  347. };
  348.  
  349. static char *alias_help[] =
  350. {    "This is the node's network layer node name ( alias )",
  351.     "It is 1-6 characters long, and must consist of",
  352.     "letters, numbers or the '#' character. It is",
  353.     "converted to uppercase.", 0
  354. };
  355.  
  356. static char *nodelistsize_help[] =
  357. {    "This parameter sets the size of the node destination",
  358.     "table. Each entry can hold details about a single",
  359.     "node complete with its 3 neighbour details.",
  360.     "Each entry takes a buffer, so keep it as small as",
  361.     "possible.", 0
  362. };
  363.  
  364. static char *autoupdate_help[] =
  365. {    "This is the minimum quality for a remote node to",
  366.     "possess in order that it get included in the node's",
  367.     "destination lists. If set to zero, then auto update",
  368.     "of the destination list is disabled.", 0
  369. };
  370.  
  371. static char *HDLCquality_help[] =
  372. {    "This is the default quality applied to all nodes heard",
  373.     "that do not possess an explicit entry in the table ( ie",
  374.     "one made manually by the sysop ). This parameter is for",
  375.     "nodes heard on the HDLC ( radio ) port.", 0
  376. };
  377.  
  378. static char *RS232quality_help[] =
  379. {    "This is the default quality applied to all nodes heard",
  380.     "that do not possess an explicit entry in the table ( ie",
  381.     "one made manually by the sysop ). This parameter is for",
  382.     "nodes heard on the RS232 ( crosslink ) port.", 0
  383. };
  384.  
  385. static char *obsolescence_help[] =
  386. {    "This is the initial value of obsolescence applied to",
  387.     "a node when a node broadcast is heard. It is then",
  388.     "decremented each time a nodes broadcast is sent.", 0
  389. };
  390.  
  391. static char *minobsolescence_help[] =
  392. {    "This is the minimum value of obsolescence that an",
  393.     "entry in the destination list must possess in order",
  394.     "that it get included in the nodes broadcasts. It",
  395.     "should be at least 1 lower than the obsolescence",
  396.     "parameter.", 0
  397. };
  398.  
  399. static char *bcastinterval_help[] =
  400. {    "This is the period between node broadcasts made",
  401.     "on the radio port. If the crosslink nodes broadcast",
  402.     "interval is zero, it is also the period of node",
  403.     "broadcasts on the crosslink port", 0
  404. };
  405.  
  406. static char *TTL_help[] =
  407. {    "This is the initial time to live parameter for level 4",
  408.     "connections started from this node. It is decremented",
  409.     "each time a frame is relayed by a level 3 node.", 0 
  410. };
  411.  
  412. static char *selportbcast_help[] =
  413. {    "This parameter controls which port nodes broadcasts",
  414.     "are made on. Broadcasts may be made selectively on",
  415.     "any combination of the 2 ports. It should usually",
  416.     "be set to broadcast on both ports.", 0
  417. };
  418.  
  419. static char *crossbcast_help[] =
  420. {    "This controls the frequency of nodes broadcasts on",
  421.     "the RS232 ( crosslink ) port. If set to zero, then",
  422.     "nodes broadcasts are sent at the basic node broadcast",
  423.     "interval. Otherwise, they are sent at this rate. Note",
  424.     "that decrementing of the obsolescence counter happens",
  425.     "at the rate of the main parameter, not this parameter.", 0
  426. };
  427.  
  428. static char *nodealgo_help[] =
  429. {    "This parameter sets the algorithm used for updating",
  430.     "of the destination lists. When set, the algorithm is",
  431.     "extended to include the condition :",
  432.     "    do not broadcast a route to a node on port x if the",
  433.     "    best quality neighbour was on the same port.",
  434.     "The objective is to stop multiple node systems from",
  435.     "getting their nodes tables clogged with spurious routes.",
  436.     "It makes little sense to set it for the radio port, so ",
  437.     "in general it will be set only on the crosslink port if",
  438.     "at all.", 0
  439. };
  440.  
  441. static char *hashnode_help[] =
  442. {    "This parameter allows control over whether nodes with",
  443.     "aliases that start with a '#' get broadcast in the",
  444.     "nodes broadcasts. This is to allow nodes with a '#'",
  445.     "to be prevented from being propagated. The main use",
  446.     "is to prevent broadcasts on the radio port whilst",
  447.     "still propagating them on the crosslink port.", 0
  448. };
  449.  
  450. static char *L4frack_help[] =
  451. {    "This parameter controls the transport retry timer.",
  452.     "It should be quite long as in general there should",
  453.     "not be retries at level 4 - that is level 2's job!",
  454.     "It usually means a node is out temporarily ( or is",
  455.     "dead ! ).", 0
  456. };
  457.  
  458. static char *L4retry_help[] =
  459. {    "This sets the number of level 4 retries. It should be",
  460.     "quite small as in general there should not be a need",
  461.     "for retries, that is handled by level 2!. It may mean",
  462.     "that a node is out of service.", 0
  463. };
  464.  
  465. static char *L4ack_help[] =
  466. {    "This is the delay after receiving a frame of data before",
  467.     "an acknowledgement is sent. It is designed to allow an",
  468.     "ACK to piggyback on data ( if available ).", 0
  469. };
  470.  
  471. static char *L4busy_help[] =
  472. {    "This is the release time from a choked state.",
  473.     "If the node is sent a choke packet, it should also get",
  474.     "a release. If it does not, then it will release anyway",
  475.     "after this time.", 0
  476. };
  477.  
  478. static char *L4window_help[] =
  479. {    "This controls the size of the transmit & receive windows.",
  480.     "On transmit, it is the number of frames that can be sent",
  481.     "without an acknowledgement. On receive, it is the number",
  482.     "of frames that can be held out of sequence whilst",
  483.     "awaiting a selective resend of an earlier packet.",
  484.     "A big number will gobble up buffers nicely!.", 0
  485. };
  486.  
  487. static char *overfill_help[] =
  488. {    "This is the transport layer receive overfill limit.",
  489.     "It specifies the maximum number of transport frames",
  490.     "that can be stored in the transport layer before a",
  491.     "choke frame is sent to the sending node.", 0
  492. };
  493.  
  494. static char *noactivity_help[] =
  495. {    "This is the no activity timer.",
  496.     "If a station connected to the switch does nothing for",
  497.     "this time ( more specifically, there is no data on",
  498.     "that channel ) for this period of time, they will be",
  499.     "disconnected.", 0
  500. };
  501.  
  502. static char *beaconmode_help[] =
  503. {    "This sets the mode of ID beacons.",
  504.     "Bacon messages may be enabled, disabled or set to occur",
  505.     "only when there is activity on the radio channel", 0 
  506. };
  507.  
  508. static char *beaconperiod_help[] =
  509. {    "This parameter sets the interval between beacon",
  510.     "messages. In the original TheNet these were every",
  511.     "10 minutes ( 600 seconds ). By this parameter, the",
  512.     "period may be changed according to prevailing license",
  513.     "conditions", 0
  514. };
  515.  
  516. static char *beacondigi_help[] =
  517. {    "In certain ( RARE ! ) situations, it is desirable to",
  518.     "be able to send ID ( ie beacon ) messages via another",
  519.     "station by digipeating. This parameter sets the callsign",
  520.     "of the station to digipeat through. The callsign may",
  521.     "also be cleared to disable digipeating the beacon message.", 0
  522. };
  523.  
  524. static char *cqenable_help[] =
  525. {    "The packet switch CQ command may be disabled in 2 different",
  526.     "ways. Firstly, by the use of the 'CQ -' sysop command, and",
  527.     "secondly by the use of this parameter. ( must get rid of this",
  528.     "one one of these days ).", 0
  529. };
  530.  
  531. static char *infomsg_help[] =
  532. {    "This is the station info message. It is the first half of",
  533.     "the info message sent when a user gives the 'Info' command,",
  534.     "the other half being the sysop set info message.",
  535.     "Unlike the sysop message, this message may contain carrage",
  536.     "return characters to spread the message over a number of lines.", 0
  537. };
  538.  
  539. static char *password_help[] =
  540. {    "This parameter sets the eprom ( default ) password.",
  541.     "The password should ideally consist of a random",
  542.     "selection of characters chosen from the full ascii",
  543.     "character set, and be of the full length of 80 characters.",
  544.     "The program will choose a pseudorandom password for you if",
  545.     "you request it.", 0
  546. };
  547.  
  548. static char *conredir_help[] =
  549. {    "If a user gives the 'Connect' message but does not specify",
  550.     "a destination callsign, the original version of TheNet",
  551.     "attempted to connect to the host via the RS232 port.",
  552.     "Unless there was such a host, this got nowhere. In this",
  553.     "version, such connect requests are redirected to either the",
  554.     "BBS, DXCluster or HOST destinations ( assuming such are set ! ).", 0
  555. };
  556.  
  557. static char *usermessage_help[] =
  558. {    "These are boolean flags that allow individual user switch",
  559.     "help messages to be enabled or disabled.", 0
  560. };
  561.  
  562. static char *escape_help[] =
  563. {    "This parameter is the command lead-in character.",
  564.     "This is the character that is recognised as",
  565.     "signifying the start of a command when using",
  566.     "the host port and a terminal. Typically, this",
  567.     "would be the escape character, so to connect to",
  568.     "the node, the host terminal user would hit the",
  569.     "escape key followed by 'C'. The character may be",
  570.     "redefined using this parameter. The decimal value",
  571.     "of the desired ASCII character should be entered.", 0
  572. };
  573.  
  574. static char *save_help[] =
  575. {    "This command allows the current configuration to be saved",
  576.     "back to the file so that it may be burnt into an eprom.",
  577.     "The old version of the file will be deleted.", 0
  578. };
  579.  
  580. static char *ip_addr_help[] =
  581. {
  582.     "This allows the input of an IP style address.",
  583.     "The format is",
  584.     " ",
  585.     "    nnn.nnn.nnn.nnn",
  586.     " ",
  587.     "where nnn is an integer in the range 0..255",
  588.     "Note that it may be 1,2 or 3 characters long",
  589.     "(ie leading zeros are not needed)",
  590.     "and amateur addresses start '44'",
  591.     "My address is therefore 44.131.16.31 and",
  592.     "my broadcast address here in the uk is 44.131.0.0",
  593.     NULL
  594. };
  595.  
  596. static char *ip_TTL_help[] =
  597. {
  598.     "This is the default Time to Live for IP frames that",
  599.     "originate from this node. It may take any value up",
  600.     "to 255, and a typical value is about 20 ish",
  601.     NULL
  602. };
  603.  
  604. static char *ip_ports_help[] =
  605. {
  606.     "This sets the default mode of operation on each of the",
  607.     "ports on the TNC. Each may be set to Datagram mode (DG)",
  608.     "or may be set to Virtual Circuit mode (VC).",
  609.     "The default mode is the one used if nothing else",
  610.     "sets the mode ( like the IP frame flags or the ARP entry",
  611.     NULL
  612. };
  613.  
  614. static char *ip_enable_help[] =
  615. {
  616.     "This allows the operation of the IP router to be",
  617.     "enabled or disabled.",
  618.     NULL
  619. };
  620.  
  621. static char *trying_help[] =
  622. {
  623.     "This message is sent to the user when the BBS, DXCluster",
  624.     "or HOST commands are used. They tell the user that",
  625.     "something is happening such as",
  626.     "   Trying to connect to G9XYZ...",
  627.     NULL
  628. };
  629.  
  630. static char *sysopall_help[] =
  631. {
  632.     "This item causes the sysop ( or manager ) who has",
  633.     "passed authentication to be shown ALL commands when",
  634.     "an invalid command is entered",
  635.     NULL
  636. };
  637.  
  638. static char *goodbye_help[] =
  639. {
  640.     "This flag causes the node to say 'goodbye' to a",
  641.     "used who enters the Bye or Quit commands",
  642.     NULL
  643. };
  644.  
  645. static char *connect_help[] =
  646. {
  647.     "When enabled, and when a Ctext message is set, then a",
  648.     "user who uplinks to the node alias gets a welcome",
  649.     "message",
  650.     NULL
  651. };
  652.  
  653. static char *talk8bit_help[] =
  654. {
  655.     "When enabled, then user data in TALK sessions is",
  656.     "passed as 8 bit data rather than having the top",
  657.     "bit forced to zero.",
  658.     NULL
  659. };
  660.  
  661. static char *nodelcase_help[] =
  662. {
  663.     "When enabled, then any instance of checking a node",
  664.     "alias within the switch ( i.e. connect request to",
  665.     "a node's alias or sysop node forcing ) is made case",
  666.     "sensitive. BEWARE - this could confuse users !",
  667.     NULL
  668. };
  669.  
  670. static char *store_help[] =
  671. {
  672.     "This command allows the current set of parameters",
  673.     "to be stored in a disk file in a manner that",
  674.     "permits them to be editied or loaded again.",
  675.     "The idea is that either a full set or a partial",
  676.     "set may be reloaded to configure some or all of",
  677.     "a new rom image.",
  678.     NULL
  679. };
  680.  
  681. static char *load_help[] =
  682. {
  683.     "This command allows the a set of parameters",
  684.     "that had been stored in a disk file to be loaded.",
  685.     "The idea is that either a full set or a partial",
  686.     "set may be reloaded to configure some or all of",
  687.     "a new rom image.",
  688.     NULL
  689. };
  690.  
  691. static char *dispalias_help[] =
  692. {
  693.     "This flag determines whether, when the user issues",
  694.     "the 'routes' command, the neighbours are shown as",
  695.     "'callsign', or ( if enabled ) as 'alias:callsign'.",
  696.     NULL
  697. };
  698.  
  699. static char *reconnect_help[] =
  700. {
  701.     "If set, this parameter causes the node to",
  702.     "reconnect users who connect to it, then",
  703.     "connect on to another node and get disconnected",
  704.     "from it.",
  705.     NULL
  706. };
  707.  
  708. static char *digiupdown_help[] =
  709. {
  710.     "This parameter controls whether the node will",
  711.     "allow digipeat uplinks to the node, or digipeat",
  712.     "downlinks from the node. This differs from the",
  713.     "digipeat control word in the following way. The",
  714.     "digipeat control word is used to control whether",
  715.     "the node will act as a digipeater. This parameter",
  716.     "controls whether the node will respond when a link",
  717.     "to or from it has been or will be digipeated to",
  718.     "reach the node. Each bit controls a function as",
  719.     "shown below. When a bit is set, connections of that",
  720.     "type will be prohibited",
  721.     "Bit 0 - bar digipeated connections to the node",
  722.     "Bit 1 - bar digipeated downlinks from the node",
  723.     NULL
  724. };
  725.  
  726. static char *noslime_help[] =
  727. {
  728.     "This parameter controls 'slime trails'.",
  729.     "If set to zero, the node operates as normal. If set to",
  730.     "another value, it operates as shown below",
  731.     "    1    Do not display slime trails in node lists",
  732.     "    2    Do not accept slime trails",
  733.     "    3    Neither accept or display slime trails",
  734.     " ",
  735.     "Not accepting slime trails will cause the node to",
  736.     "ignore circuits from stations unless they are the",
  737.     "subject of an acceptable node broadcast. Do not use",
  738.     "this unless you understand the implications !",
  739.     NULL
  740. };
  741.  
  742. static char *devmeter_help[] =
  743. {
  744.     "This parameter sets the dev meter scaling factor.",
  745.     "Please consult the documentation to decide on the",
  746.     "correct setting",
  747.     NULL
  748. };
  749.  
  750. static char *smeternoise_help[] =
  751. {
  752.     "This parameter sets the S meter noise floor.",
  753.     "This is the value that is subtracted from the",
  754.     "ADC to get a zero referenced reading for the signal.",
  755.     "Please consult the documentation to decide on the",
  756.     "correct setting",
  757.     NULL
  758. };
  759.  
  760. static char *smetermult_help[] =
  761. {
  762.     "This parameter sets the S meter multiplier.",
  763.     "This is the value that ADC readings are multiplied",
  764.     "by to get a reading of the form 'S1...S9+'.",
  765.     "Please consult the documentation to decide on the",
  766.     "correct setting",
  767.     NULL
  768. };
  769.  
  770. static char *dbmetermult_help[] =
  771. {
  772.     "This parameter sets the dBm meter multiplier.",
  773.     "This is the value that ADC readings are multiplied",
  774.     "by to get a reading of the form '-nnn dBm'.",
  775.     "Please consult the documentation to decide on the",
  776.     "correct setting",
  777.     NULL
  778. };
  779.  
  780. static char *dbmeterfloor_help[] =
  781. {
  782.     "This parameter sets the dBm meter noise floor.",
  783.     "This is the value that ADC readings offset by",
  784.     "to get a reading of the form '-nnn dBm'.",
  785.     "Please consult the documentation to decide on the",
  786.     "correct setting",
  787.     NULL
  788. };
  789.  
  790. static char *voltmetermult_help[] =
  791. {
  792.     "This parameter sets a voltmeter channel multiplier.",
  793.     "This is the value that ADC readings are multiplied",
  794.     "by to get a reading of the form 'nn.n V'.",
  795.     "Please consult the documentation to decide on the",
  796.     "correct setting",
  797.     NULL
  798. };
  799.  
  800. static char *voltmeterofs_help[] =
  801. {
  802.     "This parameter sets a voltmeter channel offset.",
  803.     "This is the value that is subtracted from the ADC",
  804.     "readings before applying the multiplier factor.",
  805.     "Please consult the documentation to decide on the",
  806.     "correct setting.",
  807.     NULL
  808. };
  809.  
  810. static char *texnet_help[] =
  811. {
  812.     "This flag controls the TexNet interface handler.",
  813.     "If set, then TexNet '*** LINKED to' messages will",
  814.     "cause callsign mapping to occur.",
  815.     "Please consult the documentation for details.",
  816.     NULL
  817. };
  818.  
  819. static char *devmeterenable_help[] =
  820. {
  821.     "This flag controls whether the heard list will",
  822.     "show received signal deviation readings.",
  823.     NULL
  824. };
  825.  
  826. static char *smeterenable_help[] =
  827. {
  828.     "This flag controls whether the heard list will",
  829.     "show received signal strength readings.",
  830.     NULL
  831. };
  832.  
  833. static char *smeterass_help[] =
  834. {
  835.     "This flag controls whether the heard list will",
  836.     "show received signal strength readings as",
  837.     "'S1..S9' ( if on ) or 'dBm' ( if off ).",
  838.     NULL
  839. };
  840.  
  841. static char *voltmeter_help[] =
  842. {
  843.     "This flag controls whether one of the",
  844.     "voltmeter channels will be displayed.",
  845.     "when a user issues the 'ADC' command.",
  846.     NULL
  847. };
  848.  
  849. static char *voltresolution_help[] =
  850. {
  851.     "This flag controls whether one of the",
  852.     "voltmeter channels will be displayed",
  853.     "as an integer or with an extra digit",
  854.     "of resolution ( e.g. 23.4 as opposed",
  855.     "to 23 ).",
  856.     NULL
  857. };
  858.  
  859. static char *voltdivide_help[] =
  860. {
  861.     "This flag controls whether the voltmeter",
  862.     "channel intermediate value will be",
  863.     "divided by 1000 or 100. If 'enabled', then",
  864.     "the value used will be 1000.",
  865.     "For more information, consult the documentation.",
  866.     NULL
  867. };
  868.  
  869. static MENULINE level1_menu_text[] = 
  870. {
  871.     { 2,    &level1text[1], 0x66, persistance_help, 64, d_int, e_int, 0, 255 },
  872.     { 2,    &level1text[2], 0x68, slottime_help, 10, d_int, e_int, 0, 127 },
  873.     { 3,    &level1text[3], 0x7c, fullduplex_help, 0, d_bool, e_int, 0, 1 },
  874.     { 3,    &level1text[4], 0x7d, sendflags_help, 0, d_bool, e_int, 0, 1 },
  875.     { 1,    &level1text[5], 0x7f, txdelay_help, 30, d_int, e_int, 0, 255 },
  876.     { 2,    &level1text[6], 0x122, cwidperiod_help, 1800, d_int, e_int, 0, 3600 },
  877.     { 1,    &level1text[7], 0x124, cwidspeed_help, 6, d_int, e_int, 4, 10 },
  878.     { 5,    &level1text[8], 0x125, hostmode_help, 0, d_host_mode, e_int, 0, 1 },
  879.     { 6,    &level1text[9], 0x126, crosslink_help, 0, d_crosslink, e_int, 0, 3 }
  880. };
  881.  
  882. MENU level1_menu =
  883. {
  884.     level1_menu_text,
  885.     level1text,
  886.     "Level 1 parameters",
  887.     level1_menu_help
  888. };
  889.  
  890. static MENULINE level2_menu_text[] = 
  891. {
  892.     { 10,    &level2text[1], 0x3b, nodecall_help, 0, d_callsign, e_callsign, 0, 0 },
  893.     { 2,    &level2text[2], 0x6a, T1_help, 5, d_int, e_int, 1, 15 },
  894.     { 2,    &level2text[3], 0x6c, L2window_help, 2, d_int, e_int, 1, 7 },
  895.     { 2,    &level2text[4], 0x6e, L2retry_help, 10, d_int, e_int, 0, 127 },
  896.     { 2,    &level2text[5], 0x70, T2_help, 100, d_int, e_int, 0, 6000 },
  897.     { 2,    &level2text[6], 0x72, T3_help, 18000, d_int, e_int, 0, 65535 },
  898.     { 4,    &level2text[7], 0x74, digipeat_help, 0, d_bool, e_int, 0, 1 },
  899.     { 4,    &level2text[8], 0x76, callvalidate_help, 1, d_bool, e_int, 0, 1 },
  900.     { 1,    &level2text[9], 0x127, mheard_help, 20, d_int, e_int, 0, 100 },
  901.     { 1,    &level2text[10],0x150, digiupdown_help, 0, d_int, e_int, 0, 3 },
  902. };
  903.  
  904. MENU level2_menu =
  905. {
  906.     level2_menu_text,
  907.     level2text,
  908.     "Level 2 ( AX.25 ) parameters",
  909.     level2_menu_help
  910. };
  911.  
  912. static MENULINE level3_menu_text[] = 
  913. {
  914.     { 9,    &level3text[1], 0x42, alias_help, 0, d_alias, e_alias, 0, 0 },
  915.     { 2,    &level3text[2], 0x48, nodelistsize_help, 50, d_int, e_int, 1, 400 },
  916.     { 2,    &level3text[3], 0x4a, autoupdate_help, 10, d_int, e_int, 0, 255 },
  917.     { 2,    &level3text[4], 0x4c, HDLCquality_help, 10, d_int, e_int, 0, 255 },
  918.     { 2,    &level3text[5], 0x4e, RS232quality_help, 255, d_int, e_int, 0, 255 },
  919.     { 2,    &level3text[6], 0x50, obsolescence_help, 7, d_int, e_int, 0, 255 },
  920.     { 2,    &level3text[7], 0x52, minobsolescence_help, 5, d_int, e_int, 1, 255 },
  921.     { 2,    &level3text[8], 0x54, bcastinterval_help, 1800, d_int, e_int, 0, 65535 },
  922.     { 2,    &level3text[9], 0x56, TTL_help, 10, d_int, e_int, 0, 255 },
  923.     { 11,    &level3text[10], 0x128, selportbcast_help, 3, d_ports, e_int, 0, 3 },
  924.     { 2,    &level3text[11], 0x129, crossbcast_help, 600, d_int, e_int, 0, 65535 },
  925.     { 11,    &level3text[12], 0x12b, nodealgo_help, 2, d_ports, e_int, 0, 3 },
  926.     { 11,   &level3text[13], 0x137, hashnode_help, 0, d_ports, e_int, 0, 3 },
  927.     { 1,    &level3text[14],0x14f, noslime_help, 0, d_int, e_int, 0, 3 },
  928. };
  929.  
  930. MENU level3_menu =
  931. {
  932.     level3_menu_text,
  933.     level3text,
  934.     "Level 3 ( network ) parameters",
  935.     level3_menu_help
  936. };
  937.  
  938. static MENULINE level4_menu_text[] = 
  939. {
  940.     { 2,    &level4text[1], 0x58, L4frack_help, 300, d_int, e_int, 5, 600 },
  941.     { 2,    &level4text[2], 0x5a, L4retry_help, 2, d_int, e_int, 1, 127 },
  942.     { 2,    &level4text[3], 0x5c, L4ack_help, 3, d_int, e_int, 1, 60 },
  943.     { 2,    &level4text[4], 0x5e, L4busy_help, 180, d_int, e_int, 1, 1000 },
  944.     { 2,    &level4text[5], 0x60, L4window_help, 4, d_int, e_int, 1, 127 },
  945.     { 2,    &level4text[6], 0x62, overfill_help, 4, d_int, e_int, 1, 127 },
  946. };
  947.  
  948. MENU level4_menu =
  949. {
  950.     level4_menu_text,
  951.     level4text,
  952.     "Level 4 ( transport ) parameters",
  953.     level4_menu_help
  954. };
  955.  
  956. static char *message_text[] =
  957. {
  958.     "Select a parameter from below or press ESC for previous menu",
  959.     "    Issue a message when trying BBS etc",
  960.     "    Show all available commands to sysop",
  961.     "    Say 'goodbye' nicely",
  962.     "    Give connect text on uplink to alias",
  963.     "    Show nodes in routes as alias:callsign",
  964.     "    Pass 8 bit data in TALK command",
  965.     "    Make node alias handling case sensitive",
  966.     "    Enable/Disable TexNet interface handler",
  967.     NULL
  968. };
  969.  
  970. static char *meterflags_text[] =
  971. {
  972.     "Select a parameter from below or press ESC for previous menu",
  973.     "    Enable Deviation meter",
  974.     "    Enable Signal strength meter",
  975.     "    Show Signals as 'S1..S9+'.",
  976.     "    Enable Voltmeter channel 1",
  977.     "    Enable Voltmeter channel 2",
  978.     "    Divisor is 1000 not 100, channel 1",
  979.     "    Divisor is 1000 not 100, channel 2",
  980.     "    Resolution setting fine, channel 1",
  981.     "    Resolution setting fine, channel 2",
  982.     NULL
  983. };
  984.  
  985. static char *message_menu_help[] =
  986. {
  987.     "This menu allows a range of user help messages",
  988.     "to be enabled or disabled",
  989.     "as well as enabling case sensitive node alias",
  990.     "handling, passing 8 bit data in 'Talk' and",
  991.     "enabling or disabling the TexNet interface.",
  992.     NULL
  993. };
  994.  
  995. static char *mtu_ip0_help[] =
  996. {
  997.     "This parameter sets the MTU for the Radio port",
  998.     "(i.e. port '0'). IP frames, sent to the node for",
  999.     "routing, will be fragmented if they are to be",
  1000.     "sent on the radio port and if they exceed the",
  1001.     "size set for this parameter.",
  1002.     "**WARNING** Big MTUs can seriously damage your node",
  1003.     NULL
  1004. };
  1005.  
  1006. static char *mtu_ip1_help[] =
  1007. {
  1008.     "This parameter sets the MTU for the RS232 port",
  1009.     "(i.e. port '1'). IP frames, sent to the node for",
  1010.     "routing, will be fragmented if they are to be",
  1011.     "sent on the crosslink port and if they exceed the",
  1012.     "size set for this parameter.",
  1013.     "**WARNING** Big MTUs can seriously damage your node",
  1014.     NULL
  1015. };
  1016.  
  1017. static char *mtu_ipn_help[] =
  1018. {
  1019.     "This parameter sets the MTU for the Net/Rom port",
  1020.     "IP frames, sent to the node for routing, will be",
  1021.     "fragmented if they are to be sent by Net/Rom and",
  1022.     "if they exceed the size set for this parameter.",
  1023.     "Note that 236 is the max for Net/Rom compatibility.",
  1024.     NULL
  1025. };
  1026.  
  1027. static char *mtu_i_max_help[] =
  1028. {
  1029.     "This sets the Level 2 receive process limit for",
  1030.     "the number of data bytes in a level 2 AX.25",
  1031.     "packet before a level 2 reject frame is sent.",
  1032.     "It is set to one higher than the limit you want",
  1033.     "so for 256 byte packets, set it to 257",
  1034.     NULL
  1035. };
  1036.  
  1037. static char *mtu_l2_max_help[] =
  1038. {
  1039.     "This sets the limit beyond which a level 2 frame",
  1040.     "gets discarded. This is to protect the node above",
  1041.     "all else. If a frame is bigger than this, it is",
  1042.     "trashed. It is set to permit a packet of the max",
  1043.     "number of data bytes expected plus the addressing",
  1044.     "and control information of AX.25 plus a full set",
  1045.     "of digipeat calls. It therefore is 72 higher than",
  1046.     "the max number of data bytes ( ie 328 for 256 byte",
  1047.     "packets).",
  1048.     NULL
  1049. };
  1050.  
  1051. static MENULINE message_menu_text[] =
  1052. {
  1053.     { 17,    &message_text[1], 0x143, trying_help, 0, d_bit, e_bit, 0, 1 },
  1054.     { 18,    &message_text[2], 0x143, sysopall_help, 0, d_bit, e_bit, 0, 1 },
  1055.     { 19,    &message_text[3], 0x143, goodbye_help, 0, d_bit, e_bit, 0, 1 },
  1056.     { 20,    &message_text[4], 0x143, connect_help, 0, d_bit, e_bit, 0, 1 },
  1057.     { 21,    &message_text[5], 0x143, dispalias_help, 0, d_bit, e_bit, 0, 1 },
  1058.     { 22,    &message_text[6], 0x143, talk8bit_help, 0, d_bit, e_bit, 0, 1 },
  1059.     { 23,    &message_text[7], 0x143, nodelcase_help, 0, d_bit, e_bit, 0, 1 },
  1060.     { 24,    &message_text[8], 0x143, texnet_help, 0, d_bit, e_bit, 0, 1 },
  1061. };
  1062.  
  1063. MENU message_menu =
  1064. {
  1065.     message_menu_text,
  1066.     message_text,
  1067.     "Level 7 ( switch ) help messages ",
  1068.     message_menu_help
  1069. };
  1070.  
  1071. static MENULINE meterflags_menu_text[] =
  1072. {
  1073.     { 17,    &meterflags_text[1], 0x152, devmeterenable_help, 0, d_bit, e_bit, 0, 1 },
  1074.     { 18,    &meterflags_text[2], 0x152, smeterenable_help, 0, d_bit, e_bit, 0, 1 },
  1075.     { 19,    &meterflags_text[3], 0x152, smeterass_help, 0, d_bit, e_bit, 0, 1 },
  1076.     { 20,    &meterflags_text[4], 0x152, voltmeter_help, 0, d_bit, e_bit, 0, 1 },
  1077.     { 21,    &meterflags_text[5], 0x152, voltmeter_help, 0, d_bit, e_bit, 0, 1 },
  1078.     { 22,    &meterflags_text[6], 0x152, voltdivide_help, 0, d_bit, e_bit, 0, 1 },
  1079.     { 23,    &meterflags_text[7], 0x152, voltdivide_help, 0, d_bit, e_bit, 0, 1 },
  1080.     { 24,    &meterflags_text[8], 0x152, voltresolution_help, 0, d_bit, e_bit, 0, 1 },
  1081.     { 17,    &meterflags_text[9], 0x153, voltresolution_help, 0, d_bit, e_bit, 0, 1 },
  1082. };
  1083.  
  1084. MENU meterflags_menu =
  1085. {
  1086.     meterflags_menu_text,
  1087.     meterflags_text,
  1088.     "Meter control flags ",
  1089.     meterflags_menu_help
  1090. };
  1091.  
  1092. static MENULINE level7_menu_text[] = 
  1093. {
  1094.     { 2,    &level7text[1], 0x64, noactivity_help, 900, d_int, e_int, 0, 65535 },
  1095.     { 7,    &level7text[2], 0x78, beaconmode_help, 2, d_beacon, e_int, 0, 2 },
  1096.     { 2,    &level7text[3], 0x134, beaconperiod_help, 900, d_int, e_int, 600, 3600 },
  1097.     { 12,    &level7text[4], 0x12c, beacondigi_help, 0, d_callsign, e_callsign, 0, 0 },
  1098.     { 4,    &level7text[5], 0x7a, cqenable_help, 1, d_bool, e_int, 0, 1 },
  1099.     { 14,    &level7text[6], 0xd1, infomsg_help, 0, d_infomsg, e_infomsg, 0, 0 },
  1100.     { 15,    &level7text[7], 0x80, password_help, 0, d_password, e_password, 0, 0 },
  1101.     { 8,    &level7text[8], 0x136, conredir_help, 0, d_conredir, e_int, 0, 2 },
  1102.     { 0,    &level7text[9], &message_menu, message_menu_help, 0, NULL, NULL, 0, 0 },
  1103.     { 3,    &level7text[10],0x14e, reconnect_help, 1, d_bool, e_int, 0, 1 },
  1104. };
  1105.  
  1106. MENU level7_menu =
  1107. {
  1108.     level7_menu_text,
  1109.     level7text,
  1110.     "Level 7 ( command interpreter ) parameters",
  1111.     level7_menu_help
  1112. };
  1113.  
  1114. static MENULINE misc_menu_text[] = 
  1115. {
  1116.     { 1,    &misctext[1], 0x7e, escape_help, 0x1b, d_int, e_int, 0, 127 },
  1117. };
  1118.  
  1119. MENU misc_menu =
  1120. {
  1121.     misc_menu_text,
  1122.     misctext,
  1123.     "Miscellaneous parameters",
  1124.     misc_menu_help
  1125. };
  1126.  
  1127.  
  1128. char *mtu_menu_help[] =
  1129. {
  1130.     "This menu allows the IP router MTUs to be configured.",
  1131.     "Specifically, it permits the MTU related parameters",
  1132.     "of the node to be configured to allow the node to",
  1133.     "accept larger frames. Note that the last 2 parameters",
  1134.     "must be set to a size large enough to cater for the",
  1135.     "individual port MTUs.", 0
  1136. };
  1137.  
  1138. static char *mtu_text[] =
  1139. {
  1140.     "Select a parameter from below or hit ESC for the previous menu",
  1141.     "    MTU for AX.25 Level 2 IP on Radio port",
  1142.     "    MTU for AX.25 Level 2 IP on RS232 port",
  1143.     "    MTU for Net/Rom IP on L3 port",
  1144.     "    Max data bytes in a L2 packet",
  1145.     "    Total bytes in a L2 packet",
  1146.     NULL
  1147. };
  1148.  
  1149. static MENULINE mtu_menu_text[] =
  1150. {
  1151.     {  2,  &mtu_text[1], 0x144,  mtu_ip0_help,    256,  d_int,   e_int,  64,  1024 },
  1152.     {  2,  &mtu_text[2], 0x146,  mtu_ip1_help,    256,  d_int,   e_int,  64,  1024 },
  1153.     {  2,  &mtu_text[3], 0x148,  mtu_ipn_help,    236,  d_int,  e_int,  64,   236 },
  1154.     {  2,  &mtu_text[4], 0x14a,  mtu_i_max_help,   257,  d_int,  e_int, 257,  1025 },
  1155.     {  2,  &mtu_text[5], 0x14c,  mtu_l2_max_help,  328,  d_int,  e_int, 328,  1096 }
  1156. };
  1157.  
  1158. MENU mtu_menu =
  1159. {
  1160.     mtu_menu_text,
  1161.     mtu_text,
  1162.     "IP MTU Parameters",
  1163.     mtu_menu_help
  1164. };
  1165.  
  1166. char *ip_menu_help[] =
  1167. {
  1168.     "This menu allows the IP router to be configured.",
  1169.     "Specifically, the IP address may be set, the IP",
  1170.     "address used to denote broadcasts can be set,",
  1171.     "the default IP time-to-live may be set and the",
  1172.     "default mode of operation for each port may be",
  1173.     "defined. The IP router may also enabled or",
  1174.     "disabled.", 0
  1175. };
  1176.  
  1177. char *meter_menu_help[] =
  1178. {
  1179.     "This menu allows the ADC control parameters to be",
  1180.     "configured ( ie those associated with the 'meters').",
  1181.     "Specifically, the flags that control the meters,",
  1182.     "and the various multipliers and offsets that control",
  1183.     "the deviation meter, signal strength meter and",
  1184.     "voltmeters may be set.", 0
  1185. };
  1186.  
  1187. static char *ip_text[] =
  1188. {
  1189.     "Select a parameter from below or hit ESC for the previous menu",
  1190.     "    This node's IP ( Amprnet ) address",
  1191.     "    The IP ( Amprnet ) broadcast address",
  1192.     "    The default Time To Live ( TTL )",
  1193.     "    AX.25 ports mode control ( DG/VC )",
  1194.     "    Enable or Disable the IP router",
  1195.     "    Set MTU parameters menu",
  1196.     NULL
  1197. };
  1198.  
  1199. static MENULINE ip_menu_text[] =
  1200. {
  1201.     { 16,  &ip_text[1], 0x138,  ip_addr_help,    0,  d_ip_addr, e_ipaddr,  0,  0 },
  1202.     { 16,  &ip_text[2], 0x13c,  ip_addr_help,    0,  d_ip_addr, e_ipaddr,  0,  0 },
  1203.     {  1,  &ip_text[3], 0x141,  ip_TTL_help,    10,  d_int,     e_int,  2,255 },
  1204.     { 27,  &ip_text[4], 0x140,  ip_ports_help,   0,  d_ip_ports,e_int,  0,  3 },
  1205.     {  3,  &ip_text[5], 0x142,  ip_enable_help,  1,  d_bool,    e_int,  0,  1 },
  1206.     {  0,  &ip_text[6], &mtu_menu, mtu_menu_help, 0, NULL, NULL, 0, 0 }
  1207. };
  1208.  
  1209. MENU ip_menu =
  1210. {
  1211.     ip_menu_text,
  1212.     ip_text,
  1213.     "IP Router Parameters",
  1214.     ip_menu_help
  1215. };
  1216.  
  1217. static MENULINE meter_menu_text[] =
  1218. {
  1219.     { 0,    &metertext[1], &meterflags_menu, meterflags_menu_help, 0, NULL, NULL, 0, 0 },
  1220.     { 1,    &metertext[2], 0x151, devmeter_help, 0, d_int, e_int, 0, 255 },
  1221.     { 1,    &metertext[3], 0x154, smeternoise_help, 0, d_int, e_int, 0, 255 },
  1222.     { 1,    &metertext[4], 0x155, smetermult_help, 0, d_int, e_int, 0, 255 },
  1223.     { 1,    &metertext[5], 0x156, dbmetermult_help, 0, d_int, e_int, 0, 255 },
  1224.     { 1,    &metertext[6], 0x157, dbmeterfloor_help, 0, d_int, e_int, 0, 255 },
  1225.     { 1,    &metertext[7], 0x158, voltmetermult_help, 0, d_int, e_int, 0, 255 },
  1226.     { 1,    &metertext[8], 0x159, voltmetermult_help, 0, d_int, e_int, 0, 255 },
  1227.     { 1,    &metertext[9], 0x15a, voltmeterofs_help, 0, d_int, e_int, 0, 255 },
  1228.     { 1,    &metertext[10], 0x15b, voltmeterofs_help, 0, d_int, e_int, 0, 255 },
  1229. };
  1230.  
  1231. MENU meter_menu =
  1232. {
  1233.     meter_menu_text,
  1234.     metertext,
  1235.     "ADC Meter Control Parameters",
  1236.     meter_menu_help
  1237. };
  1238.  
  1239. static MENULINE opening_menu_text[] = 
  1240. {
  1241.     { 0,    &openingtext[1], &level1_menu, level1_menu_help, 0, NULL, NULL, 0, 0 },
  1242.     { 0,    &openingtext[2], &level2_menu, level2_menu_help, 0, NULL, NULL, 0, 0 },
  1243.     { 0,    &openingtext[3], &level3_menu, level3_menu_help, 0, NULL, NULL, 0, 0 },
  1244.     { 0,    &openingtext[4], &level4_menu, level4_menu_help, 0, NULL, NULL, 0, 0 },
  1245.     { 0,    &openingtext[5], &level7_menu, level7_menu_help, 0, NULL, NULL, 0, 0 },
  1246.     { 0,    &openingtext[6], &ip_menu,     ip_menu_help,     0, NULL, NULL, 0, 0 },
  1247.     { 0,    &openingtext[7], &misc_menu, misc_menu_help, 0, NULL, NULL, 0, 0 },
  1248.     { 0,    &openingtext[8], &meter_menu, meter_menu_help, 0, NULL, NULL, 0, 0 },
  1249.     { 13,    &openingtext[9], NULL, save_help, 0, NULL, NULL, 0, 0 },
  1250.     { 25,    &openingtext[10], NULL, store_help, 0, NULL, NULL, 0, 0 },
  1251.     { 26,    &openingtext[11], NULL, load_help, 0, NULL, NULL, 0, 0 }
  1252. };
  1253.  
  1254. char *opening_menu_help[] =
  1255. {
  1256.     "TheNet patcher for version X-1J Release 2", " ",
  1257.     "This program allows TheNet to be configured",
  1258.     "by means of a menu driven user interface.",
  1259.     "Help is available in a context sensitive manner",
  1260.     "on all menus ( well, almost all ! ).",
  1261.     "The program does not currently have version checking",
  1262.     "enabled, so it can be used for other versions of",
  1263.     "TheNet - BUT BE CAREFUL - because not all versions",
  1264.     "have the same parameters !!!!!",
  1265.     "The program looks for files called 'THENET1.X1J'",
  1266.     "and 'THENET2.X1J' in the current directory, but an",
  1267.     "alternative pair of files may be given as arguments",
  1268.     "to the program when invoked.", 0
  1269. };
  1270.  
  1271. MENU opening_menu =
  1272. {
  1273.     opening_menu_text,
  1274.     openingtext,
  1275.     "Main Menu",
  1276.     opening_menu_help
  1277. };
  1278.  
  1279. FILELINK filelink[] =
  1280. {
  1281.     { "NodeCallsign",        &level2_menu_text[0] },
  1282.     { "NodeAlias",            &level3_menu_text[0] },
  1283.     { "NodeIpAddress",        &ip_menu_text[0] },
  1284.     { "IpBroadcastAddress",        &ip_menu_text[1] },
  1285.     { "TxKeyupDelay",        &level1_menu_text[4] },
  1286.     { "Persistance",        &level1_menu_text[0] },
  1287.     { "SlotTime",            &level1_menu_text[1] },
  1288.     { "InformationMessage",        &level7_menu_text[5] },
  1289.     { "Password",            &level7_menu_text[6] },
  1290.     { "ConnectRedirector",        &level7_menu_text[7] },
  1291.     { "CwidPeriod",            &level1_menu_text[5] },
  1292.     { "CwidSpeed",            &level1_menu_text[6] },
  1293.     { "FullDuplexFlag",        &level1_menu_text[2] },
  1294.     { "FullDuplexSendFlags",    &level1_menu_text[3] },
  1295.     { "HostMode",            &level1_menu_text[7] },
  1296.     { "CrosslinkProtocol",        &level1_menu_text[8] },
  1297.     { "L2WindowSize",        &level2_menu_text[2] },
  1298.     { "L2RetryCounter",        &level2_menu_text[3] },
  1299.     { "L2T1Timer",            &level2_menu_text[1] },
  1300.     { "L2T2Timer",            &level2_menu_text[4] },
  1301.     { "L2T3Timer",            &level2_menu_text[5] },
  1302.     { "L2DigipeatFlag",        &level2_menu_text[6] },
  1303.     { "CallValidateFlag",        &level2_menu_text[7] },
  1304.     { "MHeardTableSize",        &level2_menu_text[8] },
  1305.     { "NodeListSize",        &level3_menu_text[1] },
  1306.     { "NodeAutoUpdate",        &level3_menu_text[2] },
  1307.     { "HDLCPortQuality",        &level3_menu_text[3] },
  1308.     { "RS232PortQuality",        &level3_menu_text[4] },
  1309.     { "InitalObsolescence",        &level3_menu_text[5] },
  1310.     { "MinimumObsolescence",    &level3_menu_text[6] },
  1311.     { "BroadcastInterval",        &level3_menu_text[7] },
  1312.     { "NetworkTimeToLive",        &level3_menu_text[8] },
  1313.     { "SelectivePortBroadcast",    &level3_menu_text[9] },
  1314.     { "CrosslinkBroadcastTime",    &level3_menu_text[10] },
  1315.     { "NodeBroadcastAlgorithm",    &level3_menu_text[11] },
  1316.     { "HashNodeBroadcastControl",    &level3_menu_text[12] },
  1317.     { "TransportFrackTimer",    &level4_menu_text[0] },
  1318.     { "TransportRetryCounter",    &level4_menu_text[1] },
  1319.     { "TransportAckTimer",        &level4_menu_text[2] },
  1320.     { "TransportBusyTimer",        &level4_menu_text[3] },
  1321.     { "TransportWindowCount",    &level4_menu_text[4] },
  1322.     { "TransportOverfillLimit",    &level4_menu_text[5] },
  1323.     { "NoActivityTimer",        &level7_menu_text[0] },
  1324.     { "BeaconMode",            &level7_menu_text[1] },
  1325.     { "BeaconTimer",        &level7_menu_text[2] },
  1326.     { "BeaconDigiCallsign",        &level7_menu_text[3] },
  1327.     { "CQEnableFlag",        &level7_menu_text[4] },
  1328.     { "HostEscapeCharacter",    &misc_menu_text[0] },
  1329.     { "IpTimeToLive",        &ip_menu_text[2] },
  1330.     { "IpPortModeFlags",        &ip_menu_text[3] },
  1331.     { "IpEnableFlag",        &ip_menu_text[4] },
  1332.     { "TryingToConnectMsgFlag",    &message_menu_text[0] },
  1333.     { "SysopSeesAllCommandsFlag",    &message_menu_text[1] },
  1334.     { "GoodbyeMessageFlag",        &message_menu_text[2] },
  1335.     { "ConnectWelcomeMessageFlag",    &message_menu_text[3] },
  1336.     { "ShowNodesAsAliasCallsign",    &message_menu_text[4] },
  1337.     { "Pass8BitDataInTalkCommand",    &message_menu_text[5] },
  1338.     { "MakeAliasesCaseSensitive",    &message_menu_text[6] },
  1339.     { "IpMtuPort0",            &mtu_menu_text[0] },
  1340.     { "IpMtuPort1",            &mtu_menu_text[1] },
  1341.     { "IpMtuNetromPort",        &mtu_menu_text[2] },
  1342.     { "IpMtuMaxL2InfoBytes",    &mtu_menu_text[3] },
  1343.     { "IpMtuMaxTotalL2DataBytes",    &mtu_menu_text[4] },
  1344.     { "AutoReconnectToNode",    &level7_menu_text[9] },
  1345.     { "L2DigiUpAndDownlinkCtrl",    &level2_menu_text[9] },
  1346.     { "DeviationMeterScale",    &meter_menu_text[1] },
  1347.     { "SmeterNoiseFloor",        &meter_menu_text[2] },
  1348.     { "SmeterScaleMultiplier",    &meter_menu_text[3] },
  1349.     { "SmeterDbMultiplier",        &meter_menu_text[4] },
  1350.     { "SmeterDbNoiseFloor",        &meter_menu_text[5] },
  1351.     { "Voltmeter1Multipler",    &meter_menu_text[6] },
  1352.     { "Voltmeter2Multipler",    &meter_menu_text[7] },
  1353.     { "Voltmeter1Offset",        &meter_menu_text[8] },
  1354.     { "Voltmeter2Offset",        &meter_menu_text[9] },
  1355.     { "DevMeterEnableFlag",        &meterflags_menu_text[0] },
  1356.     { "SMeterEnableFlag",        &meterflags_menu_text[1] },
  1357.     { "SMeterAsSPointsFlag",    &meterflags_menu_text[2] },
  1358.     { "VoltmeterChannel1Flag",    &meterflags_menu_text[3] },
  1359.     { "VoltmeterChannel2Flag",    &meterflags_menu_text[4] },
  1360.     { "VoltmeterChannel1Divisor",    &meterflags_menu_text[5] },
  1361.     { "VoltmeterChannel2Divisor",    &meterflags_menu_text[6] },
  1362.     { "VoltmeterChannel1Resolution",    &meterflags_menu_text[7] },
  1363.     { "VoltmeterChannel2Resolution",    &meterflags_menu_text[8] }
  1364. };
  1365.  
  1366. unsigned filelinksize = sizeof( filelink ) / sizeof( FILELINK );
  1367.